/**
 * fs 是操作 文件，与文件系统进行交互的实例
 */

 'use strict'
 
 const fs = require('fs'),
  path = require('path');

  function resolve (url) {
    return path.resolve(__dirname, url)
  }

/**
 * fs.unlink() 删除 文件
 */
// fs.unlinkSync(resolve('./test.js'), err => {
//   if (err) throw err;
//   console.log('已成功删除文件')
// })

/**
 * fs.unlink() 使用promise处理
 */
// (async function (path) {
//   try{
//     await fs.unlink(path, (err) =>{});
//     console.log(`已成功删除${path}`)
//   } catch (err) {
//     console.log('出错', err.message)
//   }
// })(resolve('./test.js'))


/**
 * fs.rename() 重命名文件名
 * fs.stat() 读取文件
 */
//  fs.rename('test1.js', 'test3.js', err => {
//    if (err) throw err;
//    console.log('重命名完成')
//    fs.stat('test3.js', (err, stats) => {
//      if (err) throw err;
//      console.log(`文件属性：${JSON.stringify(stats)}`)
//    })
//  })

 /**
  * fs.open() 打开文件
  * fs.close() 关闭文件 有打开就有关闭 否则将会内存泄漏，最终导致应用程序崩溃
  */
//  fs.open(resolve('./test3.js'), 'r', (err, fd) => {
//    if (err) throw err;
//    console.log(fd);
//    fs.close(fd, err => {
//      if (err) throw err
//    })
//  })

/**
 * fs.Dir 表示目录流的类
 * fs.opendir()
 * fs.opendirSync() 或 fs.Promises.opendir()
 */
// async function print(path) {
//   const dir = await fs.promises.opendir(path);
//   for await (const dirent of dir) {
//     console.log(dirent)
//   }
// }
// print('.').catch(console.error);

/**
 * fs.mkdir() 创建目录
 */
// fs.mkdir(resolve('./test4.js'), (err) => {
//   if (err) throw err;
//   console.log('创建成功')
// })

/**
 * fs.open() 打开文件
 */
// fs.open('./test3.js', (err, fd) => {
//   console.log(fd)
//   // fs.read('./test3.js', (err, byte, buf) => {
//   //   if (err) throw err;
//   //   console.log(err, byte, buf)
//   // })
//   fs.readFile('./test3.js', 'utf8', (err, data) => {
//     if (err) throw err;
//     console.log(data);
//   })
// })

/**
 * fs.appendFile() 可以追加数据到 目标文件里
 */
// fs.appendFileSync(resolve('./test2.js'), 'hello world', 'utf8')

/**
 * fs.writeFile(file, data[,option], callback) 向文件写入数据
 */
// fs.writeFile('./test3.js', 'nihao', err => {
//   if (err) throw err;
//   console.log('文件写入成功');
// })

/**
 * 创建一个文件 并写入 数据 
 */
function test(path) {
  fs.writeFile(path, '这是test1数据', (err) => {
    fs.readFile(path, 'utf8', (err, data) => {
      console.log(data)
    })
  })
}
test(resolve('./test1.js'))
